package com.atguigu.controller;

import com.atguigu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * 获取请求参数的方式：
 * 1，通过servletAPI获取
 * 只需要在控制器方法的形参位置设置HttpServletRequest类型的形参就可以在控制器方法中使用request对象获取请求参数
 * 2、通过控制器方法的形参获取
 * 只需要在控制器方法的形参位置，设置一个形参，形参的名字和请求参数的名字一致即可
 * 3、@Requestparam:将请求参数和控制器方法的形参绑定
 * @Requestparam注解的三个属性: value. required，defauLtvaLuevalue:设置和形参绑定的请求参数的名字
 * required:设置是否必须传输vaLue所对应的请求参数默认值为true，表示value所对应的请求参数必须传输，
 * 否则页面报错：
 * 400 - Required string parameter "xxx" is not present
 * 若设置为 false，则表示value所对应的请求参数不是必须传输，若为传输，则形参值为null
 * defaultvalue:设置当没有传输value所对应的请求参数时，为形参设置的默认值，此时和required属性值
 * 4.@RequestHeader:将请求头信息和控制器方法的形参绑定
 * 5.@CookieValue:将cookie 数据和控制器方法的形参绑定
 *
 * 6、通过控制器方法的实体类类型的形参获取请求参数
 * 需要在控制器方法的形参位置设置实体类类型的形参，要保证实体类中的属性的属性名
 * 和请求参数的名字一可以通过实体类类型的形参获取请求参数
 *
 * 7.解决获取请求参数的中文乱码问题
 * 在 web.xml 中配置编码过滤器解决
 */

@Controller
public class TestParamController {
    @RequestMapping("/param/servletAPI")
    public String getParamByServlet(HttpServletRequest request){
        HttpSession session = request.getSession();
        System.out.println("username:"+request.getParameter("username")+",password:"+request.getParameter("password"));
        return "success";
    }
    @RequestMapping("/param")
    public String getParam(
            @RequestParam(value = "uname", required = false,defaultValue = "admin")
                    String username,
                    String password,
                    @RequestHeader("referer") String referer,
                    @CookieValue("JSESSIONID") String jsessionId
            ){
        System.out.println("jsessionId:"+jsessionId);
        System.out.println("referer:"+referer);
        System.out.println("username:"+username+",password:"+password);
        return "success";
    }
    @RequestMapping("param/pojo")
    public String getParamByPojo(User user){
        System.out.println(user);
        return "success";
    }
}

